home *** CD-ROM | disk | FTP | other *** search
- include file;
- include command;
-
- main: entry () =
- {
- fp: stream; // Input file
- c: int;
- i: int;
- tabcolumn: int; // Column for tabs
- lineno: unsigned; // Line # in file
-
- if (ArgumentCount != 1){
- stderr printf("Use is: PR filename\n");
- return;
- }
- Printer newFile(getNextArgument());
- i = fp open(Printer.filename, AR_READ);
- if (i != 0){
- stderr printf("Couldn't open %s\n",
- Printer.filename);
- return;
- }
- Printer header();
- lineno = 1;
- while ((c = fp getc()) != EOF){
- printf("%5d ", lineno);
- lineno++;
- tabcolumn = 0;
- while (c != '\n' &&
- c != '\f' &&
- c != EOF){
- if (c == '\t'){
- i = padAmount(tabcolumn);
- tabcolumn += i;
- while (i){
- stdout putc(' ');
- i--;
- }
- }
- else {
- stdout putc(c);
- tabcolumn++;
- }
- c = fp getc();
- }
- if (c == '\f')
- Printer.lineCount = 1000;
- /* Force an
- end of
- page */
- Printer endofline();
- }
- stdout putc('\f'); /* Finish
- the last
- page */
- fp close();
- }
-
- padAmount: (tabcolumn: int) int =
- {
- i: int;
-
- i = (tabcolumn + 8) & 7; /* compute the
- column within
- the tab */
- return 8 - i; /* spaces to pad */
- }
-
- Printer: {
-
- private:
-
- pageCount: int; /* The current page
- number */
-
- public:
-
- lineCount: int; /* The current
- number of lines
- printed
- on a page */
- filename: * char; // Input file name
-
- newFile: (f: * char) =
- {
- filename = f;
- pageCount = 1;
- }
-
- endofline: () =
- {
- lineCount++;
- if (lineCount < 60) // 60 lines per page
- stdout putc('\n');
- else {
- stdout putc('\f');
- header();
- }
- }
-
- header: () =
- {
- printf("%-16s page %d\n\n\n", filename,
- pageCount++);
- lineCount = 3;
- }
-
- };
-